package com.zyf.project.binaryproto.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <h1>数据契约</h1>
 * <p>用于把一个接口类型声明为一份标准化的“数据契约”，作用于类或字段上</p>
 * <p>数据契约的定义由类型编码（{@link DataContract#code()}）和属性列表构成，其中属性列表中有唯一一个主键字段，主键字段的值用于标识数据契约实例的唯一性</p>
 * <p>数据契约通过属性可以引用其他数据契约，这样便构成了数据契约嵌套定义的关系图</p>
 *
 * @author Zhou Yifan
 */
@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DataContract {

    /**
     * 类型编号，不同类型不能声明为相同的编号
     *
     * @return 类型编号的编码
     */
    int code();

    String name() default "";

    String description() default "";
}
